/* --------------------------- (C) COPYRIGHT 2020 Fortiortech ShenZhen -----------------------------
    File Name      : Customer.h
    Author         : Fortiortech  Appliction Team
    Version        : V1.0
    Date           : 2020-04-10
    Description    : This file contains customer parameter used for Motor Control.
----------------------------------------------------------------------------------------------------
                                       All Rights Reserved
------------------------------------------------------------------------------------------------- */
/* Define to prevent recursive inclusion --------------------------------------------------------*/
#ifndef __CUSTOMER_H_
#define __CUSTOMER_H_
#include <Develop.h>

#define I_ValueX(Curr_Value)            ((Curr_Value) * (HW_RSHUNT) * (HW_AMPGAIN) / (HW_ADC_REF))
#define I_Value(Curr_Value)             _Q15(I_ValueX(Curr_Value))
//系数K=3.6*0.02/4.5 *32767=524


/*芯片参数值*/
/*PWM Parameter*/
#define PWM_FREQUENCY                  (10.0)                                  // (kHz) 载波频率
/*deadtime Parameter*/
#define PWM_DEADTIME                   (1.0)                                   // (us) 死区时间

/*基准电压采样次数*/
#define Calib_Time                     (1000)                                  // 校正次数，固定1000次，单位:次

/*电机参数值*/
#define Pole_Pairs                     (7.0)                                                // 极对数

#define MOTOR_SPEED_BASE               (8000.0)                                // (RPM) 速度基准

/*硬件板子参数设置值*/
/*电机电流采样相关硬件参数*/
#define AMP_MODE                       (EXTERNAL)                              // AMP0选择使用输入通道放大倍数来源，INTERNAL内部放大倍数  EXTERNAL外部放大倍数
#define AMP0_VHALF                     (1)                                     // AMP0是否存在Vhalf偏置电压 1有偏置电压  0没有接偏置电压
#define HW_RSHUNT                      (0.1)                                   // (Ω)  采样电阻
#define HW_ADC_REF                     (4.5)                                     // (V)  ADC参考电压
#define HW_AMPGAIN                     (6.0)                                     // 运放放大倍数
#define CFG_AMP0GAIN                   (AMP4x)                                 // AMP0放大倍数配置
// AMP0放大倍数：AMP2x：2倍   AMP4x：4倍    AMP8x：8倍 AMP16x：16倍  AMP32x：32倍

/*电机驱动母线电压采样相关硬件参数*/
//#define VOLTAGE_MODE                   (EXTERNAL)                              // 母线电压选择使用分压通道，INTERNAL内部分压-AD14  EXTERNAL外部分压-AD2
#define RV1                            (11.0)                                   // (kΩ) 母线电压分压电阻1
#define RV2                            (0.0)                                   // (kΩ) 母线电压分压电阻2
#define RV3                            (1.0)                                   // (kΩ) 母线电压分压电阻3
#define VC1                            (0.0)                                   // 电压补偿系数
#define RV                             ((RV1 + RV2 + RV3) / RV3)              // 选择外部分压时分压系数


/*顺逆风设置*/
#define  Wind_Time                     (uint16)(50)                             // (ms) 顺风检测时间，单位：ms                                                                                       
#define  Wind_SpeedUp                  (uint16)(10000.0)                        // 顺风启动上限转速
#define  Wind_SpeedDown                (uint16)(300.0)                          // 顺风启动下限转速
#define  Wind_CCWSpeed                 (uint16)(3000.0)                         // ni风启动下限转速


#define  Low_Speed_BrakeTime           (uint16)(100)                            //低速或者静止的情况下的刹车时间
#define  CCW_Speed_BrakeTime           (uint16)(2000)                           //逆风运行刹车时间

#define  Check_Time                    (uint16)(10)                            // (ms) 驱动电路检测时间，单位：ms

    


/*开环参数设置*/
#define Motor_Duty_ARR                 (30)                                   // 开环运行时DUTY改变一次需要的载波个数
#define Motor_Duty_STEP                (1)                                    // 每一次改变DUTY的数值

#define Max_BLDC_Duty                  (1.0)   //0.3                               // 最大输出DUTY
#define Min_RUN_Duty                   (0.01)                                  // 运行最小DUTY    



/*速度环参数*/
/*------------------------------------------------------------------------------*/
#define SPEED_INC                      _Q15(5.0 / MOTOR_SPEED_BASE)            // 速度环增量
#define SPEED_DEC                      _Q15(5.0 / MOTOR_SPEED_BASE)            // 速度环减量

#define TARGET_SPEED                   _Q15(4000.0 / MOTOR_SPEED_BASE)         // 目标速度

#define SPEED_LOOP_TIME                (1)                                    // (ms) 速度环调节周期 
#define SKP                            _Q12(2.0)                              // 外环KP
#define SKI                            _Q15(0.2)                              // 外环KI

#define SOUTMAX                         MAX_BLDC_Duty                         // (A) 外环最大限幅值       
#define SOUTMIN                         MIN_RUN_Duty                          // (A) 外环最小限幅值                                                                                                                                                 

/*模式选择设置值*/
#define IPMState                       (NormalRun)                  //NormalRun  IPMtest

/*电流采样模式 Single_Resistor单电阻采样电流，Double_Resistor双电阻采样电流  Three_Resistor三电阻采样电流*/
#define Shunt_Resistor_Mode            (Double_Resistor)

/*正反转模式，正转为CW，反转为CCW*/
#define FRMODE                         (CW)





/*强拖启动参数*/
/*强拖启动参数*/
#define Min_START_Duty                 (0.12)                                          // 启动最小DUTY

#define Start_Duty0                    (0.14)                                          //启动阶段加速        
#define Start_Duty1                    (0.16)                                          //启动阶段加速            
#define Start_Duty2                    (0.17)                                          //启动阶段加速            
#define Start_Duty3                    (0.18)                                          //启动阶段加速 
#define Start_DUTY_ADD                 (2)
#define Max_START_Duty                 (0.25)                                          //启动阶段最高速

#define MaskCount                      (2)                                                                   // 强拖阶段续流的载波个数
#define ExchangeTime_ms                TIM_FREQUENCY(40)                                                     // 强制换相时间


#define eRPM_STH                       (1600)                                                                // 6MHz的计数频率下电机最低转速为915erpm
#define BLDC_COUNT_STH                 (uint16)((PWM_FREQUENCY*10000)/(eRPM_STH))                            // 大于该转速后切入硬件运行时的PWM计数值

#define eRPM_HTS                       (1000)                                                                // 6MHz的计数频率下电机最低转速为915erpm
#define BLDC_COUNT_HTS                 (uint16)((PWM_FREQUENCY*10000)/(eRPM_HTS))                            // 小于该转速后切入软件运行时的PWM计数值


    
/*换相参数*/
#define Motor_Mask_Angle              (15.0)                                         /* 续流屏蔽角：   120度驱动时最大30.0 */
#define Motor_Advance_Angle           (10.0)                                         /* 超前角：       120度驱动时最大30.0 */



/**
 * 调速模式
 * @param (ONOFFTEST)       启停测试模式
 * @param (NONEMODE)       不调速
 * @param (PWMMODE)        PWM调速
 * @param (SREFMODE)       VSP调速
 * @param (SCLKMODE)       SCLK调速
 * @param (UARTMODE)       串口调速
 * @param (KEYMODE)        按键调速
 */
#define SPEED_MODE                     (SREFMODE)


/**
 * PWM调速 PWM极性选择
 * @param (PosiPWMDUTY)      正逻辑
 * @param (NegaPWMDUTY)      反逻辑
 */
#define PWMDUTY_Choose                 (PosiPWMDUTY)

/* motor ON/0FF value */
#define OFFPWMDuty                     _Q15(0.05)                              // 关机PWM占空比，小于该占空比关机
#define OFFPWMDutyHigh                 _Q15(1.0)                              // 关机PWM占空比，大于该占空比关机
#define ONPWMDuty                      _Q15(0.07)                               // 开机PWM占空比，大于该占空比时开机
#define MINPWMDuty                     _Q15(0.07)                              // 速度曲线上最小PWM占空比
#define MAXPWMDuty                     _Q15(0.99)                              // 速度曲线上最大PWM占空比

/*******SCLK模式下motor ON/0FF value*****************/
#define OFFPWMSclk                     (40)                                    // 关机PWM频率，小于该频率关机
#define OFFPWMSclkHigh                 (500)                                   // 关机PWM频率，大于该频率关机
#define ONPWMSclk                      (45)                                    // 开机PWM频率，大于该频率时开机
#define MINPWMSclk                     (42)                                    // 速度曲线上最小PWM频率
#define MAXPWMSclk                     (400)                                   // 速度曲线上最大PWM频率
#define Speed_PerFre                   (4.0)                                   // 目标转速与输入频率的比例系数  例：Speed_PerFre = 4，Fre = 75;则目标转速为300
#define SCLK_SPEED_K                   _Q15(Speed_PerFre / MOTOR_SPEED_BASE)


/*启停测试参数*/
#define StartONOFF_Enable              (0)                                     // 1开启自动启停模式，0关闭自动启停模式
#define StartON_Time                   (5000)                                  // (ms) 启动运行时间
#define StartOFF_Time                  (3000)                                  // (ms) 停止时间
#define StopBrakeFlag                  (0)
#define StopWaitTime                   (1000)                                  // (ms) 刹车等待时间


/**
 * 环路控制范围 （目标控制 转速，电流，输出占空比，功率）
 * @MOTOR_LOOP_MIN_RPM      最小值
 * @MOTOR_LOOP_MAX_RPM      最大值
 */
#define MOTOR_LOOP_MIN                 S_Value(800.0)                               	// 环路控制最大值
#define MOTOR_LOOP_MAX                 S_Value(4000.0)                                 // 环路控制最小值


#endif
